#include "Thread.hpp"
#include <unordered_map>
#include <memory>

class threadData
{
public:
    int max;
    int start;
};

void Count(threadData td)
{
    for (int i = td.start; i < td.max; i++)
    {
        std::cout << "i == " << i << std::endl;
        sleep(1);
    }
}

// using thread_ptr_t = std::shared_ptr<ThreadModule::Thread>;
// #define NUM 10

// thread_ptr_t t = std::make_shared<ThreadModule::Thread>([](){
//             while(true)
//             {
//                 std::cout << "hello world" << std::endl;
//                 sleep(1);
//             }
//         });
// thread_ptr_t t([](){//改写法错误主要就是shared_ptr 的构造函数不直接接受 lambda 表达式吗
//             while(true)
//             {
//                 std::cout << "hello world" << std::endl;
//                 sleep(1);
//             }
//         });

int main()
{
    threadData td;
    td.max = 60;
    td.start = 50;
    ThreadModule::Thread<threadData> t(Count, td);
    // ThreadModule::Thread<int> t(Count, 10);

    t.start();


    t.join();

    // std::unordered_map<std::string, thread_ptr_t> threads;
    // // 如果我要创建多线程呢？？？
    // for (int i = 0; i < NUM; i++)
    // {
    //     thread_ptr_t t = std::make_shared<ThreadModule::Thread>([]()
    //                                                             {
    //         while(true)
    //         {
    //             std::cout << "hello world" << std::endl;
    //             sleep(1);
    //         } });
    //     threads[t->Name()] = t;
    // }

    // for (auto &thread : threads)
    // {
    //     thread.second->start();
    // }

    // for (auto &thread : threads)
    // {
    //     thread.second->stop();
    //     thread.second->join();
    // }

    // ThreadModule::Thread td([](){
    //     while(true)
    //     {
    //         sleep(1);
    //         std::cout<< "hello world" << std::endl;
    //     }
    // });

    // td.start();

    // sleep(5);
    // td.stop();

    // td.join();

    return 0;
}
